<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;

class ToolController extends Controller
{
    /**
     * 上传图片 base64
     *
     * @return \think\Response
     */
    //base64上传图片函数
    public function base64_upload() {
        $base64 = $this->request->request('file');
        $base64_image = str_replace(' ', '+', $base64);
        //post的数据里面，加号会被替换为空格，需要重新替换回来，如果不是post的数据，则注释掉这一行
        if (preg_match('/^(data:\s*[image|video|audio]+\/(\w+);base64,)/', $base64_image, $result)){
            //匹配成功
            if($result[2] == 'jpeg'){
                $image_name = date('Ymd') . uniqid() . '.jpg';
                //纯粹是看jpeg不爽才替换的
            }else{
                $image_name = date('Ymd') . uniqid() . '.'.$result[2];
            }
            $savePath = './uploads/'.date('Y/m/d/');
            // echo $savePath;
            // 检测目录是否存在,不存在则建之
            if (!file_exists($savePath)) {
                mkdir($savePath, 0777, true);
            }
            $image_file = $savePath . $image_name;
            //$image_file = "./Public/Personal/{$image_name}";
            //服务器文件存储路径
            if (file_put_contents($image_file, base64_decode(str_replace($result[1], '', $base64_image)))){
                return 'http://'.$_SERVER['SERVER_NAME']. '/uploads/'.date('Y/m/d/').$image_name;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }

    /**
     * 使用file对象上传图片
     *
     * @return \think\Response
     */
    public function uploadAjax($myfile = 'file', $size = 10485760, $type = ['image','video','audio'], $dir = './uploads/')
    {
        //var_dump($_FILES);exit();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }
        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];
        // var_dump($fileType);die;

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));die;
        list($mainType) = explode('/',  $fileType);

        //echo $mainType;die;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (! in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './uploads/'.date('Y/m/d/');
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // echo $saveFile;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)){
            //var_dump($saveName);exit();
            //var_dump($_SERVER['SERVER_NAME'] );exit();
            return 'http://'.$_SERVER['SERVER_NAME']. '/uploads/'.date('Y/m/d/').$saveName;
        }
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}
